package com.zenithmind.classroom.pojo.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 学习进度VO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "学习进度VO")
public class LearningProgressVO {

    /**
     * 进度ID
     */
    @Schema(description = "进度ID")
    private String id;

    /**
     * 用户ID
     */
    @Schema(description = "用户ID")
    private String userId;

    /**
     * 用户姓名
     */
    @Schema(description = "用户姓名")
    private String userName;

    /**
     * 用户头像
     */
    @Schema(description = "用户头像")
    private String userAvatar;

    /**
     * 课程ID
     */
    @Schema(description = "课程ID")
    private String courseId;

    /**
     * 课程标题
     */
    @Schema(description = "课程标题")
    private String courseTitle;

    /**
     * 课程封面
     */
    @Schema(description = "课程封面")
    private String courseCover;

    /**
     * 章节ID
     */
    @Schema(description = "章节ID")
    private String chapterId;

    /**
     * 章节标题
     */
    @Schema(description = "章节标题")
    private String chapterTitle;

    /**
     * 课时ID
     */
    @Schema(description = "课时ID")
    private String lessonId;

    /**
     * 课时标题
     */
    @Schema(description = "课时标题")
    private String lessonTitle;

    /**
     * 学习状态（0:未开始, 1:学习中, 2:已完成, 3:已暂停）
     */
    @Schema(description = "学习状态（0:未开始, 1:学习中, 2:已完成, 3:已暂停）")
    private Integer status;

    /**
     * 学习状态名称
     */
    @Schema(description = "学习状态名称")
    private String statusName;

    /**
     * 学习进度百分比
     */
    @Schema(description = "学习进度百分比")
    private Integer progressPercentage;

    /**
     * 已学习时长（秒）
     */
    @Schema(description = "已学习时长（秒）")
    private Integer studiedSeconds;

    /**
     * 总时长（秒）
     */
    @Schema(description = "总时长（秒）")
    private Integer totalSeconds;

    /**
     * 已完成课时数
     */
    @Schema(description = "已完成课时数")
    private Integer completedLessons;

    /**
     * 总课时数
     */
    @Schema(description = "总课时数")
    private Integer totalLessons;

    /**
     * 已完成章节数
     */
    @Schema(description = "已完成章节数")
    private Integer completedChapters;

    /**
     * 总章节数
     */
    @Schema(description = "总章节数")
    private Integer totalChapters;

    /**
     * 学习质量评分
     */
    @Schema(description = "学习质量评分")
    private Double qualityScore;

    /**
     * 学习效率评分
     */
    @Schema(description = "学习效率评分")
    private Double efficiencyScore;

    /**
     * 专注度评分
     */
    @Schema(description = "专注度评分")
    private Double focusScore;

    /**
     * 最后学习位置
     */
    @Schema(description = "最后学习位置")
    private Integer lastPosition;

    /**
     * 学习设备类型（1:PC, 2:移动端, 3:平板）
     */
    @Schema(description = "学习设备类型（1:PC, 2:移动端, 3:平板）")
    private Integer deviceType;

    /**
     * 学习设备名称
     */
    @Schema(description = "学习设备名称")
    private String deviceName;

    /**
     * 开始学习时间
     */
    @Schema(description = "开始学习时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startTime;

    /**
     * 最后学习时间
     */
    @Schema(description = "最后学习时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime lastStudyTime;

    /**
     * 完成时间
     */
    @Schema(description = "完成时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime completionTime;

    /**
     * 预计完成时间
     */
    @Schema(description = "预计完成时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime estimatedCompletionTime;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    /**
     * 学习笔记数量
     */
    @Schema(description = "学习笔记数量")
    private Integer noteCount;

    /**
     * 提问数量
     */
    @Schema(description = "提问数量")
    private Integer questionCount;

    /**
     * 讨论参与数量
     */
    @Schema(description = "讨论参与数量")
    private Integer discussionCount;

    /**
     * 练习完成数量
     */
    @Schema(description = "练习完成数量")
    private Integer exerciseCount;

    /**
     * 考试参与数量
     */
    @Schema(description = "考试参与数量")
    private Integer examCount;

    /**
     * 学习连续天数
     */
    @Schema(description = "学习连续天数")
    private Integer continuousDays;

    /**
     * 总学习天数
     */
    @Schema(description = "总学习天数")
    private Integer totalStudyDays;

    /**
     * 平均每日学习时长（分钟）
     */
    @Schema(description = "平均每日学习时长（分钟）")
    private Integer avgDailyMinutes;

    /**
     * 学习排名
     */
    @Schema(description = "学习排名")
    private Integer ranking;

    /**
     * 超越百分比
     */
    @Schema(description = "超越百分比")
    private Double beatPercentage;

    /**
     * 学习标签
     */
    @Schema(description = "学习标签")
    private List<String> tags;

    /**
     * 学习成就
     */
    @Schema(description = "学习成就")
    private List<Achievement> achievements;

    /**
     * 学习里程碑
     */
    @Schema(description = "学习里程碑")
    private List<Milestone> milestones;

    /**
     * 相对时间描述
     */
    @Schema(description = "相对时间描述")
    private String relativeTime;

    /**
     * 进度描述
     */
    @Schema(description = "进度描述")
    private String progressDescription;

    /**
     * 是否可以继续学习
     */
    @Schema(description = "是否可以继续学习")
    private Boolean canContinue;

    /**
     * 下一个学习内容
     */
    @Schema(description = "下一个学习内容")
    private NextContent nextContent;

    /**
     * 学习成就
     */
    @Data
    @Schema(description = "学习成就")
    public static class Achievement {
        
        /**
         * 成就ID
         */
        @Schema(description = "成就ID")
        private String id;
        
        /**
         * 成就名称
         */
        @Schema(description = "成就名称")
        private String name;
        
        /**
         * 成就描述
         */
        @Schema(description = "成就描述")
        private String description;
        
        /**
         * 成就图标
         */
        @Schema(description = "成就图标")
        private String icon;
        
        /**
         * 获得时间
         */
        @Schema(description = "获得时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime achievedTime;
    }

    /**
     * 学习里程碑
     */
    @Data
    @Schema(description = "学习里程碑")
    public static class Milestone {
        
        /**
         * 里程碑ID
         */
        @Schema(description = "里程碑ID")
        private String id;
        
        /**
         * 里程碑名称
         */
        @Schema(description = "里程碑名称")
        private String name;
        
        /**
         * 里程碑描述
         */
        @Schema(description = "里程碑描述")
        private String description;
        
        /**
         * 达成时间
         */
        @Schema(description = "达成时间")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime achievedTime;
        
        /**
         * 里程碑值
         */
        @Schema(description = "里程碑值")
        private Integer value;
    }

    /**
     * 下一个学习内容
     */
    @Data
    @Schema(description = "下一个学习内容")
    public static class NextContent {
        
        /**
         * 内容类型（lesson/chapter/course）
         */
        @Schema(description = "内容类型")
        private String type;
        
        /**
         * 内容ID
         */
        @Schema(description = "内容ID")
        private String id;
        
        /**
         * 内容标题
         */
        @Schema(description = "内容标题")
        private String title;
        
        /**
         * 内容描述
         */
        @Schema(description = "内容描述")
        private String description;
        
        /**
         * 预计时长（分钟）
         */
        @Schema(description = "预计时长（分钟）")
        private Integer estimatedMinutes;
    }
}
